//package com.ggk911.pharmacy_system.config;
//
//
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.core.convert.converter.Converter;
//
//import java.time.*;
//import java.time.format.DateTimeFormatter;
//import java.util.Date;
//
///**
// * 全局时间转换器，配置前端传来的字符串时间戳或字符串类型时间转换成时间类（Date、LocalDateTime、LocalDate、LocalTime）
// *
// * @author ggk-911
// * @version 1.0 2023/3/19 16:38
// */
//
//@Configuration
//public class AnyTimeConvertersConfig {
//
//
//    /**
//     * 全局转换前端的字符串格式时间或者字符串时间戳到LocalDateTime，前端字符串的格式为：yyyy-MM-dd HH:mm:ss
//     *
//     * @return
//     */
//    @Bean
//    public Converter<String, LocalDateTime> localDateTimeConvert() {
//        return new Converter<String, LocalDateTime>() {
//            @Override
//            public LocalDateTime convert(String source) {
//                LocalDateTime localDateTime = null;
//                // 根据字符串类型是时间戳还是日期格式自动转换
//                if (source.contains("-") || source.contains(" ") || source.contains(":")) {
//                    DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//                    try {
//                        //2020-01-01 00:00:00
//                        switch (source.length()) {
//                            case 10:
////                            logger.debug("传过来的是日期格式：{}",source);
//                                source = source + " 00:00:00";
//                                break;
//                            case 13:
////                            logger.debug("传过来的是日期 小时格式：{}",source);
//                                source = source + ":00:00";
//                                break;
//                            case 16:
////                            logger.debug("传过来的是日期 小时:分钟格式：{}",source);
//                                source = source + ":00";
//                                break;
//                        }
//                        localDateTime = LocalDateTime.parse(source, df);
//                    } catch (Exception e) {
////                    logger.error(e.getMessage(),e);
//                    }
//                    return localDateTime;
//                } else {
//                    // 将前端传来的字符串类型的毫秒级时间戳转换成LocalDateTime
//                    // 异常处理
//                    try {
//                        localDateTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(Long.parseLong(source)), ZoneId.of("+8"));
//                    } catch (Exception e) {
//                        //                    logger.error(e.getMessage(),e);
//                    }
//                    // 转换到秒级，传入的时间戳除1000操作
//                    // LocalDateTime localDateTime1 = LocalDateTime.ofEpochSecond(currentTimeTimestamp/1000, 0, ZoneOffset.of("+8"));
//                    return localDateTime;
//                }
//            }
//        };
//    }
//
//    /**
//     * java.util.Date转换器,字符串时间戳或字符串日期转Date
//     * 接收毫秒级时间戳字符串——>Date
//     *
//     * @return
//     */
//    @Bean
//    public Converter<String, Date> dateConverter() {
//        return new Converter<String, Date>() {
//            @Override
//            public Date convert(String source) {
//                Date date = null;
//                if (source.contains("-") || source.contains(":") || source.contains(" ")) {
//                    try {
////                        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
////                        date = simpleDateFormat.parse(source);
//                        //或者
//                        DateTimeFormatter dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//                        Instant instant = LocalDateTime.parse(source, dateTimeFormatter).atZone(ZoneId.of("+8")).toInstant();
//                        date = Date.from(instant);
//                    } catch (Exception e) {
//                        // todo 记录异常、处理异常
//                    }
//                } else {
//                    try {
//                        date = new Date(Long.parseLong(source));
//                        // 或者
//                        //date= Date.from(Instant.ofEpochMilli(Long.parseLong(source)));
//                    } catch (Exception e) {
//                        // 记录异常日志
//                        //todo
//                    }
//                }
//                return date;
//            }
//        };
//    }
//
//    /**
//     * 全局配置LocalDate转换器，字符串时间戳或字符串日期转LocalDate
//     *
//     * @return
//     */
//    @Bean
//    //  配置LocalDate转换器
//    public Converter<String, LocalDate> localDateConverter() {
//        return new Converter<String, LocalDate>() {
//            @Override
//            public LocalDate convert(String source) {
//                DateTimeFormatter dateTimeFormatter = null;
//                // 根据前端传递饿不同格式匹配转换规则
//                switch (source.length()) {
//                    case 10:
//                        //LocalTime只匹配时间部分，日期部分规则做冗余处理
//                        dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//                        break;
//                    case 16:
//                        //LocalTime只匹配时间部分，日期部分规则做冗余处理
//                        dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm");
//                        break;
//                    case 19:
//                        //LocalTime只匹配时间部分，日期部分规则做冗余处理
//                        dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//                        break;
//                    case 8:
//                        dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
//                        break;
//                }
//                LocalDate localDate = null;
//                // 转换字符串格式日期到LocalDate ,前端格式为 yyyy-MM-dd
//                try {
//                    if (source.contains("-") || source.contains(" ") || source.contains(":")) {
//                        localDate = LocalDate.parse(source, dateTimeFormatter);
//                    } else {
//                        // 转换字符串时间戳到LocalDate
//                        localDate = LocalDateTime.ofInstant(Instant.ofEpochMilli(Long.parseLong(source)), ZoneId.of("+8")).toLocalDate();
//                    }
//                } catch (Exception e) {
//                    //记录日志
//                    // todo
//                }
//                return localDate;
//            }
//        };
//    }
//
//    /**
//     * 全局配置LocalTime转换器，字符串时间戳或字符串日期转LocalTime
//     *
//     * @return
//     */
//    @Bean
//    // 配置LocalTime转换器
//    public Converter<String, LocalTime> localTimeConverter() {
//        return new Converter<String, LocalTime>() {
//            @Override
//            public LocalTime convert(String source) {
//                DateTimeFormatter dateTimeFormatter = null;
//                // 根据前端传递饿不同格式匹配转换规则
//                switch (source.length()) {
//                    case 19:
//                        //LocalTime只匹配时间部分，日期部分规则做冗余处理
//                        dateTimeFormatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
//                        break;
//                    case 8:
//                        dateTimeFormatter = DateTimeFormatter.ofPattern("HH:mm:ss");
//                        break;
//                }
//                LocalTime localTime = null;
//                try {
//                    if (source.contains("-") || source.contains(":") || source.contains(" ")) {
//                        localTime = LocalTime.parse(source, dateTimeFormatter);
//                    } else {
//                        localTime = LocalDateTime.ofInstant(Instant.ofEpochMilli(Long.parseLong(source)), ZoneId.of("+8")).toLocalTime();
//                    }
//                } catch (Exception e) {
//                    // 日志处理
//                }
//                return localTime;
//            }
//        };
//    }
//}